The development of large software solutions typically requires the reuse of software. This is especially the case when the user interface for software is modified to be compatible with, for example, a new operating system. In some development environments, software is generated based on pre-existing building blocks which can later be reused. However, in other environments, monolithic programs are generated, and reuse of portions of such programs can require significant programming effort. In either case, when generating a new user interface, the business logic often remains the same, thereby necessitating reuse of pre-existing software.